'use strict'

var path = require('path')

// 利用package.json文件定义项目名和版本
var meta = require('./package.json')


/************************* 环境变量 *****************************/
fis
 // 排除指定目录
  .set('project.files', ['**', '.**', '.**/**'])
  .set('project.ignore', ['node_modules/**', '.gitignore', '**/_*.scss', '.docs/**', '.dist/**', '.git/**', '.svn/**', 'fis-conf.js'])
  .set('name', meta.name)
  .set('version', meta.version)
  // 时间截
  .set('timecut', Date.now())
  
// 开启模块化包装amd，cmd
fis.hook('commonjs',{
	paths: {
		// 设置jquery别名
		// 这样就可以使用 var $ = require('jquery') 引用
		jquery: '/static/lib/jquery.min.js',
		vue: '/static/lib/vue.min.js'
	}
})
  

/************************* 语言编译 *****************************/
// 因为是纯前段项目，依赖不能自断被加载进来，所以这里需要借助一个 loader 来完成，
// 注意：与后端结合的项目不需要此插件!!!
// https://github.com/fex-team/fis3-postpackager-loader
// cnpm install -g fis3-postpackager-loader
fis.match('::package', {
    // 分析 __RESOURCE_MAP__ 结构，来解决资源加载问题
	// 创建 map.json 内容为 __RESOURCE_MAP__
    postpackager: fis.plugin('loader', {
        resourceType: 'commonJs',
        sourceMap:true, //是否生成依赖map文件
        useInlineMap: false //是否将sourcemap作为内嵌脚本输出
    })
});


/************************* 目录规范 *****************************/
fis
	.match(/^\/modules\/(.*\.(?:png|jpg|gif))$/i, {
		isMod:false,
		// 定义打包时的输出
		release: '/static/$1'
	})
	.match('/modules/**.js', {
		isMod: true
	})
	.match('/node_modules/**.js', {
		isMod: true,
		// 开启同名依赖
		useSameNameRequire: true
	});

/************************* 组件定义 *****************************/	
// 禁用 components
fis.unhook('components');
// fis3 对 npm 的 node_modules 模块的支持
// https://github.com/fex-team/fis3-hook-node_modules/
// npm install -g fis3-hook-node_modules
fis.hook('node_modules',{
    mergeLevel:3,
    shimBuffer:false
});


/************************* 测试/生产环境下  *****************************/
var map = {
	// 定义用于开发调试时的配置
    'dev': {
        host: '',
        path: ''
    },
    // 定义用于打包到生产环境时的配置
    'prod': {
        // 定义路径
        // 在打包情况下,所有的模块对象(如:.html,.css,.js)中的相对地址引用全部使用host+path转换为绝对路径
        // 这样处理的好处在于,在开发阶段所有资源的引用是使用相对路径
        // 因为只要是涉及到MVC开发模块的定义了访问路由的情况下,所有的相对地址是肯定不可靠的
        // 但在开发的过程中又不能把所有的路径写完整,因为路由的定义是非常随意的,不可能每次因为访问路由的
        // 变化而去频繁的修改资源引用地址
        // 虽然jsp页面可以使用上下文来解决,但比较繁琐,同时也解决不了css和js等静态文件中的资源引用
        host: '',
        path: '/assets/design'
    }
}

// 设定打包时要执行的内容
fis.util.map(map, function (k, v) {
	// 根据上面的配置,构造资源引用的前缀
    var domain = v.host + v.path;
	fis.media(k)
		.match('/modules/**.css', {
            // 优化清理css
            packTo: '/pkg/designer.css',
            optimizer: fis.plugin('clean-css', {
				// 保持一个规则一个换行
                'keepBreaks': true 
            })
        })
        .match('/modules/**.js', {
			// 是否加上时间截
            // query: '?=t' + fis.get('timecut'),
			// 定义所有模块的js合并打包的输出
            packTo: '/pkg/designer.js' 
        })
	
});


